home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / a_man / cat7 / ei.z / ei
Encoding:
Text File  |  2002-10-03  |  27.3 KB  |  595 lines

  1.  
  2.  
  3.  
  4. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      ei - external interrupts interface
  10.  
  11. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  12.      ####iiiinnnncccclllluuuuddddeeee <<<<ssssyyyyssss////eeeeiiii....hhhh>>>>
  13.      ffffdddd ==== ooooppppeeeennnn((((""""////ddddeeeevvvv////eeeexxxxtttteeeerrrrnnnnaaaallll____iiiinnnntttt////1111"""",,,, OOOO____RRRRDDDDOOOONNNNLLLLYYYY))));;;;
  14.  
  15. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  16.      The special files in /dev/external_int provide access to the external
  17.      interrupt interface on those machines which have such an interface. This
  18.      interface allows separate machines to send and receive interrupts over a
  19.      dedicated wire for purposes of inter-machine synchronization.  Using this
  20.      device, a user process may generate outgoing interrupts to other
  21.      machines, or receive interrupts from other machines in a variety of ways:
  22.      the user process may request to block in an ioctl() until an interrupt is
  23.      received; or may request that a signal be sent; or for the fastest
  24.      possible reaction time, a library call is provided to allow the process
  25.      to busy wait for an interrupt to arrive, thus avoiding syscall overhead.
  26.      The driver maintains per-process state, so any number of processes may
  27.      open this device and use it without interfering with each other.
  28.  
  29.      On systems with only one external interrupt interface, a single file
  30.      called "1" will be present in the directory /dev/external_int. On systems
  31.      with more than one external interrupt interface, the file "1" will be
  32.      guaranteed to represent the interface adjacent to the system console.
  33.      other interfaces will be named "2", "3" etc. as per the whims of
  34.      ioconfig(1).
  35.  
  36.      Some ioctls are supported only on certain systems. Such limitations are
  37.      noted in the ioctl descriptions below.
  38.  
  39. IIIIOOOOCCCCTTTTLLLLSSSS
  40.      EEEEIIIIIIIIOOOOCCCCEEEENNNNAAAABBBBLLLLEEEE
  41.           Enables incoming interrupts at the hardware level.  Interrupts are
  42.           disabled by default and must be enabled whenever the device is
  43.           opened.  This ioctl takes no arg.
  44.  
  45.      EEEEIIIIIIIIOOOOCCCCDDDDIIIISSSSAAAABBBBLLLLEEEE
  46.           Disables incoming interrupts at the hardware level.  Interrupts are
  47.           automatically disabled when the device is closed by the last
  48.           process.  This ioctl takes no arg.
  49.  
  50.      EEEEIIIIIIIIOOOOCCCCEEEENNNNAAAABBBBLLLLEEEELLLLBBBB
  51.           Enables loopback interrupt. When the local host generates an
  52.           interrupt via EIIOCSTROBE, the interrupt loops back to the local
  53.           host in addition to triggering a remote interrupt. This interrupt
  54.           requires no external cabling. This ioctl is only available on
  55.           Origin2000/200 series systems and Origin3000/300 series systems.
  56.           NOTE: see _B_U_G_S below.
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  71.  
  72.  
  73.  
  74.      EEEEIIIIIIIIOOOOCCCCDDDDIIIISSSSAAAABBBBLLLLEEEELLLLBBBB
  75.           Disables loopback interrupt. Outgoing interrupts generated via
  76.           EIIOCSTROBE will no longer loop back to the local host. This ioctl
  77.           is only available on Origin2000/200 series systems and
  78.           Origin3000/300 series systems.
  79.  
  80.      EEEEIIIIIIIIOOOOCCCCSSSSTTTTRRRROOOOBBBBEEEE
  81.           Generates an outgoing interrupt pulse. The output line is left
  82.           deasserted after this ioctl completes. See OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN below.
  83.  
  84.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTHHHHIIII
  85.           Asserts an outgoing interrupt line. The line is left asserted after
  86.           this ioctl completes.  This function should be used exclusively for
  87.           debugging purposes since leaving the external interrupt input to
  88.           another machine asserted for a long time may cause problems on the
  89.           receiving machine. See OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN below.
  90.  
  91.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO
  92.           Deasserts an outgoing interrupt line. See OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN below.
  93.  
  94.      EEEEIIIIIIIIOOOOCCCCPPPPUUUULLLLSSSSEEEE
  95.           Begin cyclical pulse generation. The hardware automatically triggers
  96.           an outgoing interrupt pulse at a predefined frequency (see
  97.           EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTPPPPEEEERRRRIIIIOOOODDDD ). Use EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO to stop pulse generation. This
  98.           ioctl is only available on Origin2000/200.
  99.  
  100.      EEEEIIIIIIIIOOOOCCCCSSSSQQQQUUUUAAAARRRREEEE
  101.           Begin square wave generation. The hardware automatically toggles the
  102.           output at a predefined frequency (see EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTPPPPEEEERRRRIIIIOOOODDDD ). Use
  103.           EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO to stop square wave generation. This ioctl is only
  104.           available on Origin2000/200.
  105.  
  106.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTPPPPEEEERRRRIIIIOOOODDDD
  107.           Set the period for cyclical pulse and square wave generation. The
  108.           argument is an int time value in microseconds (usec). This value
  109.           must be in the range [28-511184] inclusive and will be rounded to
  110.           the nearest multiple of 7.8 usec. This ioctl is only available on
  111.           Origin2000/200 series systems and Origin3000/300 series systems.
  112.  
  113.      EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTPPPPEEEERRRRIIIIOOOODDDD
  114.           Get the period used for cyclical pulse and square wave generation.
  115.           The argument is a pointer to an int in which to place the period
  116.           value. The period is given in microseconds. This ioctl is only
  117.           available on Origin2000/200 and Origin3000/300 series systems.
  118.  
  119.      EEEEIIIIIIIIOOOOCCCCRRRREEEECCCCVVVV
  120.           Waits until an interrupt is received.  The arg is a pointer to a
  121.           structure of type
  122.  
  123.            struct eiargs {
  124.                int intval;
  125.                struct timeval timeval;
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  137.  
  138.  
  139.  
  140.            };
  141.  
  142.           which is used both for input args and a return value.
  143.  
  144.      The intval field of the input args indicates whether or not to flush any
  145.      queued interrupts.  Incoming interrupts are queued via a counter which is
  146.      maintained per-process within the driver, indicating how many interrupts
  147.      have arrived but have not yet been retrieved by that process.  If intval
  148.      is set to 0 on input, the EIIOCRECV call will return immediately if there
  149.      is a queued interrupt for the calling process in the driver.  However, if
  150.      the intval member of arg is set to 1 on input, all previously queued
  151.      interrupts will be discarded; that is, the counter will be set to 0
  152.      before the call continues with normal processing.
  153.  
  154.      The timeval field of the input args indicates a timeout.  If the timeout
  155.      is 0, the call is effectively a poll.  If the tv_sec field of timeval is
  156.      -1, the call will never timeout.
  157.  
  158.      On return, intval is set to 1 if the call returned because of an
  159.      interrupt, or 0 if the call returned because of the timeout.
  160.  
  161.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTSSSSIIIIGGGG
  162.           Instructs the driver to send a signal to the calling process when
  163.           each interrupt arrives.  The arg is the integer value of the signal
  164.           to be sent.  It is up to the process to do something useful with
  165.           this signal.  Setting the signal to 0 disables this feature.  A
  166.           forked child process does not inherit this signal.
  167.  
  168.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTOOOOPPPPWWWW EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTIIIIPPPPWWWW EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTSSSSPPPPWWWW
  169.           These functions are only required for Challenge/Onyx, and are
  170.           silently ignored for all other systems.
  171.  
  172.           These functions set the value in microseconds, respectively, of the
  173.           outgoing pulsewidth, the expected incoming pulsewidth, and the
  174.           threshold beyond which an incoming pulse is deemed "stuck."  The arg
  175.           in each case is an int.  The default values are restored when the
  176.           device is closed by the last process.
  177.  
  178.           The outgoing pulsewidth determines how long the output lines are
  179.           asserted when the driver generates an outgoing interrupt.  This
  180.           value should not be set too high, since the processor busy waits
  181.           with all interrupts blocked during this time.  Likewise, too short a
  182.           pulse will not be received by the remote machine.  The value must be
  183.           in the range [2-1000].  The default is 10 microseconds.
  184.  
  185.           The expected incoming pulsewidth determines how long the interrupt
  186.           handler will wait before returning.  The interrupt handler must not
  187.           return while the input line is still asserted, otherwise multiple
  188.           interrupts are received from the same input pulse, indicating to the
  189.           driver that the line is "stuck" (see below).  The value must be in
  190.           the range [2-1000].  The default is 10 microseconds.
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  203.  
  204.  
  205.  
  206.           The "stuck" pulsewidth defines the minimum allowable time between
  207.           distinct input pulses.  Any two pulses that arrive within this time
  208.           are considered to be the same pulse.  This is used to detect a
  209.           "stuck" input line which is always asserted.  This value must be in
  210.           the range [5-1000000].  Setting the value too low will cause a
  211.           single pulse to be processed as more than one interrupt, while
  212.           setting the value too high will limit the maximum rate at which
  213.           interrupts can be received.  The default is 500 microseconds.
  214.  
  215.      EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTOOOOPPPPWWWW EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTIIIIPPPPWWWW EEEEIIIIIIIIOOOOCCCCGGGGEEEETTTTSSSSPPPPWWWW
  216.           These functions retrieve the value in microseconds, respectively, of
  217.           the outgoing pulsewidth, the expected incoming pulsewidth, and the
  218.           threshold beyond which an incoming pulse is deemed "stuck."  See
  219.           above for descriptions of these values.  The arg in each case is a
  220.           pointer to an int in which to return the value. These values are
  221.           only variable on Challenge/Onyx. On other systems, the output and
  222.           input pulse widths will be returned as defined by the hardware, and
  223.           the stuck pulse width is always returned as zero.
  224.  
  225.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTSSSSYYYYSSSSCCCCPPPPUUUU
  226.           Sets which cpu runs system calls to the driver.  The arg is the cpu
  227.           number.  If arg is -1, system calls to the driver will run on
  228.           whatever cpu the calling process is on.  This call overrides the
  229.           built-in kernel configuration.  When the device is closed by all
  230.           processes, the configured value is restored. This ioctl is only
  231.           available on Challenge/Onyx.
  232.  
  233.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTIIIINNNNTTTTRRRRCCCCPPPPUUUU
  234.           Sets which cpu handles incoming interrupts.  The arg is the cpu
  235.           number.  This call overrides the built-in kernel configuration.
  236.           When the device is closed by all processes, the configured value is
  237.           restored. The user must be superuser or have the CAP_DEVICE_MGT
  238.           capability to assign the interrupt to a cpu which is configured as
  239.           NOINTR (see system(4)). This ioctl is only available on
  240.           Challenge/Onyx. On Origin2000/200 and Origin3000/300 systems the
  241.           interrupt may be directed to a particular cpu at kernel build time
  242.           only (see system(4)).
  243.  
  244. OOOOUUUUTTTTPPPPUUUUTTTT SSSSEEEELLLLEEEECCCCTTTTIIIIOOOONNNN
  245.      On Challenge/Onyx systems, there are 4 output jacks and all are accessed
  246.      via the file /dev/external_int/1. All output ioctls ( EEEEIIIIIIIIOOOOCCCCSSSSTTTTRRRROOOOBBBBEEEE ,
  247.      EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTHHHHIIII and EEEEIIIIIIIIOOOOCCCCSSSSEEEETTTTLLLLOOOO ) take an integer argument which is a bitmask
  248.      whose 4 low order bits specify which of the 4 output jacks to operate on.
  249.      (bit 0 specifies output 0, etc).
  250.  
  251.      On Origin2000/200 in Origin3000/300, there is one file in
  252.      /dev/external_int per output jack and the output ioctls take no argument.
  253.      Output jack selection is accomplished by opening the appropriate file in
  254.      /dev/external_int.
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  269.  
  270.  
  271.  
  272. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  273.      All ioctls return 0 on success, -1 on error with errno set to indicate
  274.      the error.  Possible values of errno are:
  275.  
  276.      EEEEFFFFAAAAUUUULLLLTTTT
  277.           Indicates that the caller passed an illegal address as a pointer to
  278.           return data.
  279.  
  280.      EEEENNNNOOOOMMMMEEEEMMMM
  281.           Indicates that the requested operation required memory allocation,
  282.           and none was available.
  283.  
  284.      EEEEIIIINNNNVVVVAAAALLLL
  285.           Indicates an invalid parameter.
  286.  
  287.      EEEEBBBBUUUUSSSSYYYY
  288.           Is returned by EIIOCSETINTRCPU if a user-level-interrupt (ULI) is
  289.           currently registered to handle the external interrupt. If setting of
  290.           the interrupt cpu is desired, it must be done before ULI
  291.           registration.
  292.  
  293. LLLLIIIIBBBBRRRRAAAARRRRYYYY FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNNSSSS
  294.      _N_O_T_E The eicinit(), eicbusywait() and eicclear() functions are obsolete
  295.           but still provided for backward compatibility. The functions
  296.           described below are preferred.
  297.  
  298.       vvvvooooiiiidddd ****eeeeiiiicccciiiinnnniiiitttt____ffff((((iiiinnnntttt ffffdddd))));;;;
  299.           Sets up some state to allow busy waiting for interrupts. The caller
  300.           must open the device and pass in a descriptor. On success, an opaque
  301.           handle is returned which is passed to the remaining functions below.
  302.           If an error occurs, a null pointer is returned and errno is set. The
  303.           function does an implicit EIIOCENABLE. If the loopback interrupt is
  304.           desired, the caller must use the EIIOCENABLELB ioctl after the call
  305.           to eicinit_f().  _N_O_T_E Since eicinit_f() does an implicit
  306.           EIIOCENABLE, using EIIOCENABLELB causes both the internal loopback
  307.           and external interrupts to be enabled simultaneously. If the
  308.           external cable loops back to the same machine, this will cause each
  309.           interrupt to be received twice (see BUGS below). This is easily
  310.           avoided by turning off the external interrupt via EIIOCDISABLE after
  311.           the call to eicinit_f().
  312.  
  313.       iiiinnnntttt eeeeiiiiccccbbbbuuuussssyyyywwwwaaaaiiiitttt____ffff((((vvvvooooiiiidddd ****hhhhaaaannnnddddlllleeee,,,, iiiinnnntttt ssssppppiiiinnnn))));;;;
  314.           _h_a_n_d_l_e is the return value from eicinit_f(), identifying the device
  315.           to be used. If _s_p_i_n is 1, this call spins until an interrupt
  316.           arrives, then returns 1.  If spin is 0, the call immediately returns
  317.           1 if there is an interrupt queued; otherwise it returns 0.  Each
  318.           interrupt is returned only once.  This function eliminates the
  319.           overhead of a system call, but the tradeoff is that it hogs the
  320.           processor.  Interrupts are queued, so an interrupt that arrived
  321.           after the call to eicinit_f() but before this call will still be
  322.           returned.  This call returns -1 if not preceeded by eicinit_f().
  323.  
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  335.  
  336.  
  337.  
  338.       vvvvooooiiiidddd eeeeiiiicccccccclllleeeeaaaarrrr____ffff((((vvvvooooiiiidddd ****hhhhaaaannnnddddlllleeee))));;;;
  339.           _h_a_n_d_l_e is the return value from eicinit_f(), identifying the device
  340.           to be used. Any previously queued interrupts on the device are
  341.           cleared, causing eicbusywait_f() to wait until the next interrupt
  342.           arrives.
  343.  
  344. DDDDIIIIAAAAGGGGNNNNOOOOSSSSTTTTIIIICCCCSSSS
  345.      The eicinit_f() function may set errno to any of the following:
  346.  
  347.      EEEENNNNOOOOMMMMEEEEMMMM
  348.           Indicates that the kernel is short on memory.
  349.  
  350.      EEEEAAAACCCCCCCCEEEESSSS
  351.           Indicates that the descriptor passed in was not opened with O_RDONLY
  352.           permissions.
  353.  
  354. NNNNOOOOTTTTEEEE OOOONNNN IIIINNNNTTTTEEEERRRRRRRRUUUUPPPPTTTT QQQQUUUUEEEEUUUUEEEESSSS
  355.      As mentioned above, the driver maintains a queue of incoming interrupts
  356.      on a per-process basis for all processes that have the driver open. These
  357.      interrupts are dequeued via the EIIOCRECV ioctl. There is a second queue
  358.      of interrupts, maintained by library functions, which is accessed by the
  359.      eicbusywait_f() function.  Dequeuing an interrupt from one of these
  360.      queues does not dequeue it from the other.  If the process wishes to
  361.      intermix these two interfaces, it will probably be necessary to dequeue
  362.      each interrupt twice, or periodically flush one of the queues.  The
  363.      EIIOCSETSIG ioctl instructs the driver to send a signal when an interrupt
  364.      arrives, but in no way modifies queue behavior.  If the process wishes to
  365.      take advantage of the queue, the signal handler will have to manipulate
  366.      the queue with either the EIIOCRECV ioctl or the eicbusywait_f() library
  367.      routine (preferably the latter, since it avoids syscall overhead).  This
  368.      is in fact very useful since signals are not queued by the system, and
  369.      may be lost if they occur too rapidly.  Using the interrupt queue, the
  370.      signal handler can tell exactly how many interrupts have arrived even if
  371.      a signal was discarded.
  372.  
  373.      The user should note that in order for the driver to maintain the per-
  374.      process queue of interrupts which is accessed by EIIOCRECV, it must know
  375.      of the existence of the process in question. Typically, the driver first
  376.      learns of a process's existence when the process does an open() on the
  377.      device. However a process may gain access to the device without ever
  378.      calling the open() function, for example a child process inheriting a
  379.      file descriptor opened by its parent. The driver will not begin queueing
  380.      interrupts on behalf of a process until it learns of the process's
  381.      existence via the first open() or ioctl() call to the device. Any
  382.      interrupts which occur before the first of one of these calls is issued
  383.      by a process will not be queued for that process. Thus a child process
  384.      which inherited a file descriptor to the device from its parent must
  385.      issue some ioctl() call to begin interrupt queueing.
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  401.  
  402.  
  403.  
  404. HARDWARE INTERFACE
  405.      The Challenge/Onyx L/XL chassis has four outgoing interrupt sockets and
  406.      two incoming interrupt sockets connected to the master IO4 board.  The
  407.      sockets are located by the label "interrupts."  The outgoing sockets,
  408.      labeled "out 0, 1, 2 and 3" are asserted, respectively, by bits 0, 1, 2,
  409.      and 3 of the EIIOCSTROBE arg.  Note that whereas the outputs may be
  410.      asserted separately, it is impossible to distinguish which input is
  411.      receiving a pulse, thus it is unimportant which input socket is used for
  412.      receiving interrupts. Origin2000/200 systems have one output and one
  413.      input jack per IO board, each pair of jacks is controlled by a separate
  414.      device file.  The jacks used are male 3-conductor 1/8 inch audio jacks
  415.      identical to those found on portable stereo headphones.  Origin3000
  416.      systems have one output and one input jack per I-Brick.  _N_O_T_E: The jack
  417.      conductors are not the same for all systems. The jack conductors are as
  418.      follows:
  419.  
  420.      For Challenge/Onyx systems:
  421.  
  422.           tip  Interrupt (active low)
  423.           ring +5V
  424.           sleeve    Chassis Ground/Cable Shield
  425.  
  426.  
  427.      For Origin systems:
  428.  
  429.           tip  +5V
  430.           ring Interrupt (active low)
  431.           sleeve    Chassis Ground/Cable Shield
  432.  
  433.  
  434.      A two conductor shielded cable is used, with the two cable conductors
  435.      wired to the +5V and Interrupt jack conductors, and the sleeve connected
  436.      to the cable shield at both ends to maintain EMI integrity.
  437.  
  438.      When connecting a multitester to the jack, the common lead should be
  439.      connected to the sleeve, and the + lead should be connected to the +5V
  440.      and interrupt conductors simultaneously.  When the line is asserted, the
  441.      multitester should read 0 volts.  When the line is deasserted, the
  442.      multitester should read 5 volts.
  443.  
  444.      The input signals pass through an opto-isolator that has a damping
  445.      effect.  The input signal must be of sufficient duration to drive the
  446.      output of the opto-isolator low in order for the interrupt to be
  447.      recognized by the receiving machine.  Current experimentation shows that
  448.      the threshold is about 2.5 microseconds.  To be safe, the driver sets its
  449.      default outgoing pulse width to 10 microseconds.  Any hardware not from
  450.      Silicon Graphics that is driving this line should do the same.
  451.  
  452.           Internal driver circuit for output connector
  453.  
  454.                +5 ---/\/\/\-------- (output +5V connector)
  455.  
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  467.  
  468.  
  469.  
  470.                          ---------- (output interrupt connector)
  471.                         |           open collector driver
  472.                         |
  473.                       |/
  474.                    ---|
  475.                       |\
  476.                         v
  477.                         |
  478.                         = (ground)
  479.  
  480.           Internal receiver circuit for input connector
  481.  
  482.                (input +5V connector)  -------------
  483.                                                    |
  484.                                                    |
  485.                                                   ---
  486.                               opto isolator LED   \ /
  487.                                                   ---
  488.                                                    |
  489.                                                    |
  490.                (input interrupt connector) --------
  491.  
  492.  
  493.  
  494.      The output connector can be wired directly to the input connector, taking
  495.      care to connect the +5V output to the +5V input and the interrupt output
  496.      to the interrupt input. See above to determine which jack conductors
  497.      correspond to +5V and interrupt depending on which system is used. If
  498.      some other device is used to drive the input, it must be a +5V source
  499.      current limited with a 420ohm resistor in series, to avoid damaging the
  500.      opto isolator.
  501.  
  502. BBBBUUUUGGGGSSSS
  503.      On Origin systems, a missing inverter on the IO6 board causes the
  504.      incoming interrupt to be detected on the falling edge of the input pulse
  505.      rather than the rising edge. This should only be an issue when
  506.      simultaneously using external cabling and the internal loopback
  507.      capability, or when mixing Challenge and Origin systems. In this former
  508.      case, the internal loopback interrupt is triggered on the rising edge of
  509.      the outgoing pulse, and the external interrupt on the remote machine is
  510.      triggered on the falling edge of the incoming pulse. The delay between
  511.      these two events is the pulse width, 23.4 usec. Uniformity can be ensured
  512.      by using an external cable to loop back to the local machine rather than
  513.      using the internal loopback interrupt.
  514.  
  515.      _N_O_T_E If both internal and external loopbacks are used on the same
  516.      machine, each interrupt generated will be received twice, since the 23.4
  517.      usec interval between them is long enough for the first interrupt to be
  518.      completely serviced and cleared before the second interrupt is triggered.
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.                                                                         PPPPaaaaggggeeee 8888
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532. eeeeiiii((((7777))))                                                                    eeeeiiii((((7777))))
  533.  
  534.  
  535.  
  536.      For cyclical pulse generation, the interval between interrupts is still
  537.      correct since the interval between the falling pulse edges is the same as
  538.      the interval between the rising pulse edges.
  539.  
  540.      When triggering external interrupts on both Origin and Challenge systems,
  541.      using the same pulse source, the Challenge systems will receive the
  542.      interrupt correctly on the rising edge, and the Origin systems will
  543.      receive the interrupt on the falling edge. The pulse width again
  544.      determines the interval separating interrupt detection on the two
  545.      systems.
  546.  
  547.  
  548.  
  549.  
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.  
  572.  
  573.  
  574.  
  575.  
  576.  
  577.  
  578.  
  579.  
  580.  
  581.  
  582.  
  583.  
  584.  
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.                                                                         PPPPaaaaggggeeee 9999
  592.  
  593.  
  594.  
  595.